import 'package:flutterDemo/pages/auth/login_page.dart';
import 'package:flutterDemo/pages/auth/register_page.dart';
import 'package:flutterDemo/pages/tab_page.dart';
import 'package:flutterDemo/pages/web_view_page.dart';
import 'package:flutter/material.dart';

class Routes {
  /// [settings] 包含路由的名称和其他相关信息
  static Route<dynamic> generateRoute(RouteSettings settings) {
    // 根据路由名称进行匹配
    switch (settings.name) {
      // 如果路由名称是首页路径
      case RoutePath.tab:
        // 创建并返回 HomePage 的路由
        return pageRoute(const TabPage(), settings: settings);
      // 如果路由名称是 WebViewPage 路径
      case RoutePath.webViewPage:
        // 创建并返回 WebViewPage 的路由，传递标题参数
        return pageRoute(
            const WebViewPage(
              // 传递给 WebViewPage 的标题，表明从首页传递过来
              title: "首页传递过来的",
            ),
            settings: settings);
      case RoutePath.loginPage:
        return pageRoute(const LoginPage(), settings: settings);
      case RoutePath.registerPage:
        return pageRoute(RegisterPage(), settings: settings);
    }
    // 如果没有匹配到任何路由，创建一个默认的路由，显示未找到的路由信息
    return pageRoute(Scaffold(
      body: SafeArea(
        // 使用 SafeArea 避免内容被系统状态栏等遮挡
        child: Center(
          // 将文本居中显示
          child: Text("route path ${settings.name}"),
          // 显示未匹配到的路由名称
        ),
      ),
    ));
  }

  /// pageRoute 方法用于创建一个 MaterialPageRoute
  /// [page] 是要显示的页面组件
  /// [settings] 路由的设置信息
  /// [fullscreenDialog] 是否以全屏对话框的形式显示
  /// [maintainState] 是否保持页面状态
  /// [allowSnapshotting] 是否允许页面快照
  static MaterialPageRoute pageRoute(
    Widget page, {
    RouteSettings? settings,
    bool? fullscreenDialog,
    bool? maintainState,
    bool? allowSnapshotting,
  }) {
    return MaterialPageRoute(
      // 构建页面的回调函数，返回要显示的页面组件
      builder: (context) {
        return page;
      },
      settings: settings,
      // 如果未提供 fullscreenDialog 参数，默认为 false
      fullscreenDialog: fullscreenDialog ?? false,
      // 如果未提供 maintainState 参数，默认为 true
      maintainState: maintainState ?? true,
      // 如果未提供 allowSnapshotting 参数，默认为 true
      allowSnapshotting: allowSnapshotting ?? true,
    );
  }
}

/// RoutePath 类用于定义应用的路由路径常量
class RoutePath {
  /// 首页的路由路径
  static const String tab = "/";

  /// WebViewPage 的路由路径
  static const String webViewPage = "/web_view_page";
  static const String loginPage = "/login_page"; //登录页
  static const String registerPage = "/register_page"; //注册页
}
